package org.dejavu.cte;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;

/**
* <p>Title: Pinyin</p>
* <p>Description: http://www.jb51.net/article/76737.htm</p>
* <p>Description: http://www.jb51.net/article/77002.htm</p>
* <p>Company: </p> 
* @author dejavu
* @date 2016-9-13 下午4:38:36
*/
public class Pinyin {
    
    public Pinyin(){
    	super();
    }
    
    /**
     * 
     	HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		// UPPERCASE：大写 (ZHONG)
		// LOWERCASE：小写 (zhong)
		format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		// WITHOUT_TONE：无音标 (zhong)
		// WITH_TONE_NUMBER：1-4数字表示英标 (zhong4)
		// WITH_TONE_MARK：直接用音标符（必须WITH_U_UNICODE否则异常） (zhòng)
		format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
		// WITH_V：用v表示ü (nv)
		// WITH_U_AND_COLON：用"u:"表示ü (nu:)
		// WITH_U_UNICODE：直接用ü (nü)
		format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
		String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重', format);
		toHanyuPinyinStringArray如果传入的字符不是汉字不能转换成拼音，那么会直接返回null。

    * 汉字转拼音的方法
    * @param name 汉字
    * @return 拼音
    */
    public String HanyuToPinyin(String name){
        char[] nameChar = name.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = 
                                           new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
        defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
        String pinyinName = "";
        for (int i = 0; i < nameChar.length; i++) {
//        	System.out.println(nameChar[i]);
//        	System.out.println(pinyinName);
            if (nameChar[i] > 128) {
                try {
                    pinyinName += PinyinHelper.toHanyuPinyinStringArray
                                           (nameChar[i], defaultFormat)[0];
                } catch (Exception e) {
//                    e.printStackTrace();
                    pinyinName += nameChar[i];
                }
            } else {
            	pinyinName += nameChar[i];
            }
        }
        return pinyinName;
    }
 
    public static void main(String[] args) {
        System.out.println(new Pinyin().HanyuToPinyin("老 子: 「道 德 經」: 第 一 章"));
    }    
}